package pt.polynomials.views;
/**
* the working board for polynomial processing
* @author Chiti
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import pt.polynomials.controllers.PolynomialDivide;
import pt.polynomials.controllers.PolynomialOperations;
import pt.polynomials.models.IntegerMonom;
import pt.polynomials.models.Polynomial;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class Board extends JFrame{
private JButton addButton;
private JButton substractButton;
private JButton multiplyButton;
private JButton divideButton;
private JButton multiplyScalarButton;
private JButton evaluateButton;
private JButton integrateButton;
private JButton derivateButton;
private JTextField polynom1Field;
private JTextField polynom2Field;
private JTextField polynom1View;
private JTextField polynom2View ;
private JTextField result;
private JTextField rest;
private JTextField scalarField;
private JTextField evaluateField;
private Polynomial<Integer> p1;
private Polynomial<Integer> p2;
private PolynomialOperations operator=new PolynomialOperations();
private PolynomialDivide divideOperator=new PolynomialDivide();
private double scalarNumber;
private double evaluateNumber;
public Board(){
this.setTitle("Polynomial Operations");
this.setPreferredSize(new Dimension(600, 600));
this.setMaximumSize(new Dimension(600, 600));
this.setMinimumSize(new Dimension(600, 600));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(true);
this.setBackground(Color.black);
this.setLocationRelativeTo(null);
this.setLayout(new GridLayout(4, 4));
polynom1Field=new JTextField("Enter first Polynom");
this.add(polynom1Field);
polynom1View=new JTextField("View1");
polynom1View.setEditable(false);
this.add(polynom1View);
evaluateButton=new JButton("Evaluate first polynom!");
evaluateButton.setBackground(Color.YELLOW);
this.add(evaluateButton);
multiplyScalarButton=new JButton("Multiply first polynom!");
multiplyScalarButton.setBackground(Color.YELLOW);
this.add(multiplyScalarButton);
polynom2Field=new JTextField("Enter second Polynom");
this.add(polynom2Field);
polynom2View=new JTextField("View2");
polynom2View.setEditable(false);
this.add(polynom2View);
evaluateField=new JTextField("Enter term for evaluation");
this.add(evaluateField);
scalarField=new JTextField("Enter scalar");
this.add(scalarField);
addButton=new JButton("Add!");
addButton.setBackground(Color.YELLOW);
this.add(addButton);
substractButton=new JButton("Substract!");
substractButton.setBackground(Color.YELLOW);
this.add(substractButton);
multiplyButton=new JButton("Multiply!");
multiplyButton.setBackground(Color.YELLOW);
this.add(multiplyButton);
divideButton=new JButton("Divide!");
divideButton.setBackground(Color.YELLOW);
this.add(divideButton);
result=new JTextField("result here");
result.setEditable(false);
this.add(result);
rest=new JTextField("rest here");
rest.setEditable(false);
this.add(rest);
integrateButton=new JButton("Integrate!");
integrateButton.setBackground(Color.YELLOW);
this.add(integrateButton);
derivateButton=new JButton("Derivate!");
derivateButton.setBackground(Color.YELLOW);
this.add(derivateButton);
HandlerFieldForPolynom1 handler1=new HandlerFieldForPolynom1();
polynom1Field.addActionListener(handler1);
HandlerFieldForPolynom2 handler2=new HandlerFieldForPolynom2();
polynom2Field.addActionListener(handler2);
HandlerScalarField handler3=new HandlerScalarField();
scalarField.addActionListener(handler3);
HandlerEvaluateField handler4=new HandlerEvaluateField();
evaluateField.addActionListener(handler4);
HandlerScalarAndEvaluateButton handler5=new HandlerScalarAndEvaluateButton();
multiplyScalarButton.addActionListener(handler5);
evaluateButton.addActionListener(handler5);
HandlerOperations handler6=new HandlerOperations();
addButton.addActionListener(handler6);
substractButton.addActionListener(handler6);
multiplyButton.addActionListener(handler6);
divideButton.addActionListener(handler6);
integrateButton.addActionListener(handler6);
derivateButton.addActionListener(handler6);
this.setVisible(true);
}
/*Class for reading first Polinom and display it*/
private class HandlerFieldForPolynom1 implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
p1=new Polynomial<Integer>();
String text=polynom1Field.getText();
String[] coeffs =text.split(new String(","));
int i;
for (i = 0; i < coeffs.length; i++) {
p1.addMonom(new IntegerMonom(i,Integer.parseInt(coeffs[i])));
}
operator.cleanPolynomial(p1);
polynom1View.setText(p1.toString());
}
}
/**
* Class for reading second Polinom and display it*/
private class HandlerFieldForPolynom2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
p2=new Polynomial<Integer>();
String text=polynom2Field.getText();
String[] coeffs =text.split(new String(","));
int i;
for (i = 0; i < coeffs.length; i++) {
p2.addMonom(new IntegerMonom(i,Integer.parseInt(coeffs[i])));
}
operator.cleanPolynomial(p2);
polynom2View.setText(p2.toString());
}
}
/**
* Class for reading the scalar
*/
private class HandlerScalarField implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
String text=scalarField.getText();
scalarNumber=Double.parseDouble(text);
}
}
/**
* Class for reading the evaluate term*/
private class HandlerEvaluateField implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
String text=evaluateField.getText();
evaluateNumber=Double.parseDouble(text);
}
}
/**
* Class for multipling polynom 1 when you press the button Multiply with Scalar!*/
private class HandlerScalarAndEvaluateButton implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == multiplyScalarButton){
Polynomial<Double> resultD=operator.multiplyScalar(p1, scalarNumber);
result.setText(resultD.toString());}
else if (event.getSource() == evaluateButton){
Double resultD=operator.evaluate(p1, evaluateNumber);
result.setText(resultD.toString());
}
}
}
/**
* Class for performing operations when buttons are pressed*/
private class HandlerOperations implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
Polynomial<Double> resultD=new Polynomial<Double>();
Polynomial<Integer> resultI=new Polynomial<Integer>();
if ( event.getSource()== addButton )
{
resultI=operator.add(p1, p2);
result.setText(resultI.toString());
}else if ( event.getSource()== substractButton ){
resultI=operator.substract(p1, p2);
result.setText(resultI.toString());
}else if (event.getSource()== multiplyButton){
resultI=operator.multiply(p1, p2);
result.setText(resultI.toString());
}else if (event.getSource()== divideButton){
resultD=divideOperator.divide(p1,p2);
result.setText(resultD.toString());
rest.setText(divideOperator.rest.toString());
}else if (event.getSource()==integrateButton){
resultD=operator.integrate(p1);
result.setText(resultD.toString());
}else if (event.getSource()==derivateButton){
resultI=operator.derivate(p1);
result.setText(resultI.toString());
}
}
}
}